package linkedList;

/*8
给定一个链表，删除链表的倒数第 n 个节点，并且返回链表的头结点。

示例：

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后，链表变为 1->2->3->5.
说明：

给定的 n 保证是有效的。

进阶：

你能尝试使用一趟扫描实现吗？
 */
public class Solution6 {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head==null||head.next==null&&n==1)
            return null;
        ListNode node = head;
        ListNode delete = null;
        while(node!=null){
            if(n>0)n--;
            else if(delete==null)
                delete = head;
            else
                delete = delete.next;
            node = node.next;
        }
        if(delete!=null)
            delete.next = delete.next.next;
        else if(n==0)
            head = head.next;
        return head;
    }
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,7,11,8,9,10};
        ListNode l1 = new ListNode(arr);
        Solution6 solution = new Solution6();
        ListNode res  = solution.removeNthFromEnd(l1,2);
        System.out.println(res);
    }

}
